package com.king.base;
/**
 * 首先，对于null的随意使用会一系列难以预料的问题。通过对大量代码的研究和分析，我们发现大概95%以上的集合类默认并不接受null值，
 * 如果有null值将被放入集合中，代码会立刻中断并报错而不是默认存储null值，对于开发来说，这样能够更加容易的定位程序出错的地方。
 * 另外，null值是一种令人不满的模糊含义。有的时候会产生二义性，这时候我们就很难搞清楚具体的意思，如果程序返回一个null值，其代
 * 表的含义到底是什么，例如：Map.get(key)若返回value值为null，其代表的含义可能是该键指向的value值是null，亦或者该键在map
 * 中并不存在。null值可以表示失败，可以表示成功，几乎可以表示任何情况。用其它一些值(而不是null值)可以让你的代码表述的含义更清晰。
 * 反过来说，使用null值在有些情况下是一种正确的选择，因为从内存消耗和效率方面考虑，使用null更加廉价，而且在对象数组中出现null也
 * 是不可避免的。但是在程序代码中，比方说在函数库中，null值的使用会变成导致误解的元凶，也会导致一些莫名的，模糊的，很难修正的问题。
 * 就像上述map的例子，字典返回null可以代表的是该键指向的值存在且为空，或者也可以代表字典中没有这个键。关键在于，null值不能指明到
 * 底null代表了什么含义。
 */
public class NullTest {

    public static void main(String[] args) {
        testNullObject();
    }

    /**
     * null只是一个关键字，用来标识一个不确定的对象，
     * 他既不是对象，也不是Object对象的实例。
     */
    public static void testNullObject() {
        if (null instanceof java.lang.Object) {
            System.out.println("null属于java.lang.Object类型");
        } else {
            System.out.println("null不属于java.lang.Object类型");
        }
    }
}